﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace JGSY.Tasks
{
    public static class ManualResetEvent1
    {
        public static ManualResetEvent _event = new ManualResetEvent(false); // 初始状态：无信号
        public static void WorkerMethod()
        {
            Console.WriteLine("工作线程开始执行");
            Thread.Sleep(3000); // 模拟耗时操作

            // 通知主线程任务完成
            Console.WriteLine("工作线程触发信号");
            _event.Set();

            // 额外操作（主线程已继续执行）
            Thread.Sleep(2000);
            Console.WriteLine("工作线程结束");
        }
        public static void ManualResetEvent001()
        {
            // 启动工作线程
            var workerThread = new Thread(WorkerMethod);
            workerThread.Start();

            // 主线程等待信号（无限期等待）
            Console.WriteLine("主线程等待任务完成...");
            _event.WaitOne(); // 阻塞直到信号触发

            Console.WriteLine("任务完成，主线程继续执行");

            // 重置信号（准备下次使用）
            _event.Reset();

            // 演示超时等待（5秒）
            Console.WriteLine("\n主线程等待超时测试...");
            bool signaled = _event.WaitOne(5000); // 等待5秒
            if (signaled)
            {
                Console.WriteLine("信号在超时前触发");
            }
            else
            {
                Console.WriteLine("等待超时，无信号");
            }
           
            // 清理资源
            _event.Dispose();
        }


    }
}
